﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Configuration;
using System.Text;

namespace Guarouba.Pages
{
    public partial class _002_Usuarios_Detalhes : PaginaBase
    {

        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                if (Classes.Tools.PegarQueryString("ID") != null)
                {
                    CarregaPermissoesDeAcesso();
                    CarregaDetalhesDaContaDoUsuario();
                    MontarTela();
                    
                }

                if (Classes.Tools.PegarQueryString("PM") == "Insert")
                {
                    ((DefaultERPMaster)Master).ShowPopUp(
                            "Usuário inserido",
                            "Os dados do usuário foram gravados com sucesso.",
                            3);
                }
            }
        }

        void MontarTela()
        {
            if (Classes.Tools.PegarQueryString("ID") != null)
            {
                btnExcluir.Visible = true;
            }
        }

        void CarregaDetalhesDaContaDoUsuario()
        {
            BLL.Seguranca.entUsuario user = new BLL.Seguranca.entUsuario();
            BLL.Seguranca seg = new BLL.Seguranca();            

            try
            {
                string idUsuario = Classes.Tools.PegarQueryString("ID").ToString();

                user = seg.CarregaDetalhesDoUsuario(idUsuario);
                if (user.LoginSucesso == true)
                {
                    txtCod.Text = user.IdUsuario;
                    txtDtCadastro.Text = user.DataCadastro;
                    txtNomeCompleto.Text = user.NomeCompleto;
                    txtLogin.Text = user.Login;
                    txtEmail.Text = user.Email;
                    txtSenha.Attributes["value"] = Classes.Tools.Decript(user.Senha);
                    txtConfirmeSenha.Attributes["value"] = Classes.Tools.Decript(user.Senha);
                }
            }
            catch (Exception ex)
            {
                ((DefaultERPMaster)Master).ShowPopUp(
                            "Erro ao carregar dados", 
                            string.Format("Não foi possível carregar os dados do usuário selecionado. Detalhes: {0}", ex.Message), 
                            4);
            }
        }

        void CarregaPermissoesDeAcesso()
        {
            DataTable dt = new DataTable();
            BLL.Seguranca seg = new BLL.Seguranca();

            string idUsuario = Classes.Tools.PegarQueryString("ID");
            dt = seg.ListaProgramasPermissao(Convert.ToInt32(idUsuario));

            lvProgramas.DataSource = dt;
            lvProgramas.DataBind();
        }

        private bool Validacoes()
        {
            StringBuilder sbErros = new StringBuilder();;

            if (txtNomeCompleto.Text == string.Empty)
                sbErros.AppendLine("Informe o nome completo do usuário.<br />");                

            if (txtLogin.Text == string.Empty)
                sbErros.AppendLine("Informe um login para o usuário. <br />");

            if (txtEmail.Text == string.Empty)
                sbErros.AppendLine("Informe um e-mail de contato válido do usuário. <br />");

            if (txtSenha.Text == string.Empty)
                sbErros.AppendLine("Informe uma senha para o usuário. <br />");

            if (txtConfirmeSenha.Text == string.Empty)
                sbErros.AppendLine("Confirme a senha do usuário. <br />");

            if (txtSenha.Text != txtConfirmeSenha.Text)
                sbErros.AppendLine("As senhas informadas não conferem. <br />");

            if (!ABX.Valid.validarEmail(txtEmail.Text))
                sbErros.AppendLine("O e-mail informado é inválido. <br />");

            if (sbErros.ToString() != string.Empty)
            {
                ((DefaultERPMaster)Master).ShowPopUp("Erro ao salvar usuário", sbErros.ToString(), 4);
                return false;
            }            
            return true;
        }

        protected void btSalvar_Click(object sender, EventArgs e)
        {
            bool validacoes = Validacoes();
            if (!validacoes)
                return;

            BLL.Seguranca.entUsuario user = new BLL.Seguranca.entUsuario();
            user.NomeCompleto = txtNomeCompleto.Text;
            user.Login = txtLogin.Text;
            user.Email = txtEmail.Text;
            user.Senha = Classes.Tools.Encript(txtSenha.Text);

            BLL.Seguranca seg = new BLL.Seguranca();

            if (Classes.Tools.PegarQueryString("ID") != null)
            {
                //Se diferente de nulo, é atualização

                try
                {
                    user.IdUsuario = Classes.Tools.PegarQueryString("ID");
                    bool atualiza = seg.AtualizaDetalhesDoUsuario(user);
                    if (atualiza)
                        ((DefaultERPMaster)Master).ShowPopUp(
                            "Usuário atualizado",
                            "Os dados do usuário foram alterados com sucesso.",
                            3);

                    //Gravar as permissões de acesso
                    GravarPermissoesDeAcesso(user.IdUsuario);
                }
                catch (Exception ex)
                {
                    ((DefaultERPMaster)Master).ShowPopUp(
                            "Erro",
                            String.Format("Houve um problema ao atualizar os dados do usuário. Detalhes: {0}", ex.Message),
                            4);
                }
            }
            else
            { 
                //Se igual nulo, é inserção

                try
                {
                    //insere usuário novo
                    user = seg.InsereDetalhesDoUsuario(user);

                    //Gravar as permissões de acesso
                    GravarPermissoesDeAcesso(user.IdUsuario);

                    Response.Redirect(String.Format("002-Usuarios-Detalhes.aspx?ID={0}&PM={1}", 
                        Classes.Tools.Encript(user.IdUsuario),
                        Classes.Tools.Encript("Insert")));
                }
                catch (Exception ex)
                {
                    ((DefaultERPMaster)Master).ShowPopUp(
                            "Erro",
                            String.Format("Houve um problema ao salvar os dados do usuário. Detalhes: {0}", ex.Message),
                            4);
                }
            }            
        }

        protected void btExcluir_Click(object sender, EventArgs e)
        {
            try
            {
                BLL.Exclusao exc = new BLL.Exclusao();
                exc.ExcluirUsuarioDoSistema(Classes.Tools.PegarQueryString("ID"));
                Response.Redirect(String.Format("001-Usuarios.aspx?PM={0}", Classes.Tools.Encript("Delete")));
            }
            catch (Exception ex)
            {
                ((DefaultERPMaster)Master).ShowPopUp(
                        "Erro",
                        String.Format("Houve um problema ao tentar excluir o usuário. Detalhes: {0}", ex.Message),
                        4);
            }
        }

        private void GravarPermissoesDeAcesso(string idUsuario)
        {
            BLL.Seguranca seg = new BLL.Seguranca();

            foreach (ListViewItem itens in this.lvProgramas.Items)
            {
                CheckBox checkslct = (CheckBox)itens.FindControl("chbPermissao");

                //Pega o ID do Programa
                Label idPrograma = (Label)itens.FindControl("lblIdPrograma");
                string idPrograma_ = idPrograma.Text;

                //Pega o ID do Usuário
                string idUsuario_ = Classes.Tools.PegarQueryString("ID");

                if (checkslct != null)
                {
                    if (checkslct.Checked)
                    {
                        //Adiciona permissão de acesso
                        seg.DefinePermissoesAcessoUsuario(idUsuario_, idPrograma_, "ADD");
                    }
                    else
                    { 
                        //Remove a permissão de acesso
                        seg.DefinePermissoesAcessoUsuario(idUsuario_, idPrograma_, "DEL");
                    }
                }
            }
        }
    }
}